﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
using FimetContoDeposito.DAL;
using GrayParrot.Core;

namespace FimetContoDeposito.DAL
{
    //public class RepositoryEx<T, Tkey> : IRepository<T, Tkey>, IDisposable
    //    where T : class
    ////where Context : DbContext, new ()
    //{
    //    DbContext _entity = null;

    //    public RepositoryEx(DbContext context)
    //    {
    //        _entity = context;
    //    }

    //    public ReturnValue<bool> Add(T entity)
    //    {
    //        ReturnValue<bool> retValue = new ReturnValue<bool>(false);

    //        try
    //        {
    //            _entity.Set<T>().Add(entity);
    //            _entity.Entry(entity).State = System.Data.Entity.EntityState.Added;

    //            retValue.HasValue = true;
    //            retValue.Value = true;
    //        }
    //        catch (Exception ex)
    //        {
    //            retValue.HasError = true;
    //            retValue.Error = ex;
    //        }

    //        return retValue;
    //    }

    //    public void Delete(T entity)
    //    {
    //        _entity.Set<T>().Remove(entity);
    //        _entity.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
    //    }

    //    public void Edit(T entity)
    //    {
    //        _entity.Entry(entity).State = System.Data.Entity.EntityState.Modified;
    //    }

    //    public IQueryable<T> GetAll()
    //    {
    //        return _entity.Set<T>();
    //    }

    //    public IQueryable<T> GetAll(
    //        Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
    //        string includeProperties = "")
    //    {
    //        IQueryable<T> Query = _entity.Set<T>();

    //        if (!string.IsNullOrEmpty(includeProperties))
    //        {
    //            foreach (string IncludeProperty in includeProperties.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    //            {
    //                Query = Query.Include(IncludeProperty);
    //            }
    //        }

    //        if (orderBy != null)
    //        {
    //            return orderBy(Query);
    //        }
    //        return Query;
    //    }

    //    public T Get(Tkey i)
    //    {
    //        return _entity.Set<T>().Find(i);
    //    }

    //    public virtual IQueryable<T> Get(
    //        Expression<Func<T, bool>> filter = null,
    //        Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
    //        string includeProperties = "")
    //    {
    //        IQueryable<T> Query = _entity.Set<T>();

    //        if (filter != null)
    //        {
    //            Query = Query.Where(filter);
    //        }

    //        if (!string.IsNullOrEmpty(includeProperties))
    //        {
    //            foreach (string IncludeProperty in includeProperties.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    //            {
    //                Query = Query.Include(IncludeProperty);
    //            }
    //        }

    //        if (orderBy != null)
    //        {
    //            return orderBy(Query);
    //        }
    //        return Query;
    //    }

    //    public void Save()
    //    {
    //        _entity.SaveChanges();
    //    }

    //    public void Dispose()
    //    {
    //        if (_entity != null)
    //        {
    //            _entity.Dispose();
    //        }
    //    }
    //}
}